import axios from 'axios'
import { ElMessage } from 'element-plus'

// 创建axios实例
const instance = axios.create({
  baseURL: '/api',
  timeout: 15000, // 增加超时时间
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
instance.interceptors.request.use(
  (config) => {
    // 从localStorage获取token
    const token = localStorage.getItem('token') || sessionStorage.getItem('token')
    if (token) {
      config.headers.token = token
    }
    
    console.log('发送请求:', {
      url: config.url,
      method: config.method,
      params: config.params,
      data: config.data,
      baseURL: config.baseURL
    })
    return config
  },
  (error) => {
    console.error('请求拦截器错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
instance.interceptors.response.use(
  (response) => {
    console.log('响应数据:', {
      status: response.status,
      statusText: response.statusText,
      data: response.data,
      headers: response.headers
    })
    
    // 检查HTTP状态码
    if (response.status !== 200) {
      const errorMsg = `HTTP请求失败: ${response.status} ${response.statusText}`
      console.error('HTTP错误:', errorMsg)
      ElMessage.error(errorMsg)
      return Promise.reject(new Error(errorMsg))
    }
    
    const data = response.data
    
    // 检查业务状态码
    if (data.code === 200) {
      console.log('业务请求成功:', data)
      return data
    } else {
      const errorMsg = data.msg || data.message || `业务错误: ${data.code}`
      console.error('业务错误:', errorMsg, data)
      ElMessage.error(errorMsg)
      return Promise.reject(new Error(errorMsg))
    }
  },
  (error) => {
    console.error('响应拦截器错误:', error)
    
    let errorMsg = '网络连接失败'
    
    if (error.response) {
      // 服务器返回了错误状态码
      errorMsg = `服务器错误: ${error.response.status} ${error.response.statusText}`
      console.error('服务器响应错误:', error.response.data)
    } else if (error.request) {
      // 请求已发出但没有收到响应
      errorMsg = '网络连接超时，请检查后端服务是否启动'
      console.error('网络请求失败:', error.request)
    } else {
      // 其他错误
      errorMsg = error.message || '请求失败'
      console.error('其他错误:', error.message)
    }
    
    console.error('最终错误信息:', errorMsg)
    ElMessage.error(errorMsg)
    return Promise.reject(new Error(errorMsg))
  }
)

export default instance
